package servlet;

import dao.GoodsDao;
import dao.UserDao;
import model.Goods;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.List;

@WebServlet(urlPatterns = "/GoodsAddServlet.do")
// 配置Servlet处理文件上传
@MultipartConfig(
        fileSizeThreshold = 1024 * 1024 * 2,    // 当文件大小超过2MB时，将其写入磁盘
        maxFileSize = 1024 * 1024 * 10,        // 单个文件最大为10MB
        maxRequestSize = 1024 * 1024 * 50)     // 整个请求最大为50MB
public class GoodsAddServlet extends HttpServlet {

    // 处理GET请求，通常用于显示数据


    // 处理POST请求，通常用于提交表单数据
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");

        // 设置图片保存路径
        String imagePath = "B:\\javaweb\\Shop-2\\src\\main\\webapp\\image";
        File imageDir = new File(imagePath);

        // 如果目录不存在，则创建
        if (!imageDir.exists()) {
            imageDir.mkdirs();
        }

        HttpSession session = request.getSession();
        String username = (String) session.getAttribute("username");

        // 检查用户名是否存在，如果不存在则重定向到登录页面
        if (username == null) {
            response.sendRedirect(request.getContextPath() + "/login.jsp");
            return;
        }

        // 使用UserDao根据username获取user_id
        UserDao userDao = new UserDao();
        int user_id = userDao.getUserIdByUsername(username);

        // 检查user_id是否有效，如果无效则重定向到错误页面
        if (user_id == 0) {
            response.sendRedirect(request.getContextPath() + "/error.jsp");
            return;
        }

        // 获取其他表单数据
        String goodsCategory = request.getParameter("goods_category");
        String goodsInfo = request.getParameter("goods_info");
        double goodsPrice;

        // 检查goods_price是否为有效数字
        try {
            goodsPrice = Double.parseDouble(request.getParameter("goods_price"));
        } catch (NumberFormatException e) {
            goodsPrice = 0.0;  // 处理goods_price为null或无效数字的情况
        }

        // 获取上传的文件部分
        Part filePart = request.getPart("goods_image");

        if (filePart != null && filePart.getSize() > 0) {
            // 获取文件名并拼接文件保存路径
            String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
            String filePath = imagePath + File.separator + fileName;

            // 保存文件
            filePart.write(filePath);

            // 创建Goods对象并设置其属性
            Goods goods = new Goods();
            goods.setGoods_category(goodsCategory);
            goods.setUser_id(user_id);
            goods.setGoods_info(goodsInfo);
            goods.setGoods_price(goodsPrice);
            goods.setGoods_image("image" + File.separator + fileName); // 保存相对路径以便在web上下文中使用

            // 将商品信息保存到数据库
            GoodsDao goodsDao = new GoodsDao();
            boolean saveGoods = goodsDao.addGoods(goods);

            // 根据保存结果进行页面重定向
            if (saveGoods) {
                response.sendRedirect(request.getContextPath() + "/background1/user/goodsManager.jsp");
            } else {
                response.sendRedirect(request.getContextPath() + "/home/404.html");
            }
        } else {
            // 处理未上传文件的情况
            response.sendRedirect(request.getContextPath() + "/home/404.html");
        }
    }
}

